﻿#define _CRT_SECURE_NO_WARNINGS 1

//小乐乐改数字
//https://www.nowcoder.com/practice/fcd30aac9c4f4028b23919a0c649824d?tpId=290&tqId=39833&ru=/exam/oj

//#include <iostream>
//#include <stdlib.h>
//using namespace std;
//
////typedef long long LL;
//
//int main()
//{
//	int n;
//	cin >> n;
//
//	int num = 0; int x = n;
//	while (x)
//	{
//		num++;
//		x /= 10;
//	}
//
//	char str[10];
//	sprintf(str, "%d", n);
//
//	//cout << str << endl;
//
//	for (int i = 0; i < num; i++)
//	{
//		if ((str[i] - '0') % 2 == 0)
//		{
//			str[i] = '0';
//		}
//		else
//		{
//			str[i] = '1';
//		}
//	}
//	
//	int k = 0;
//	for (; k < num; k++)
//	{
//		if (str[k] != '0')
//		{
//			break;
//		}
//	}
//	
//	if (k == num)
//	{
//		cout << 0;
//	}
//	else
//	{
//		for (int i = k; i < num; i++)
//		{
//			cout << str[i];
//		}
//	}
//	
//	cout << endl;
//
//	return 0;
//}


//#include <stdio.h>
//
//int getNums(int n) {
//    if (n == 0)
//        return 0;
//    else
//        return (n % 2 ? 1 : 0) + getNums(n / 10) * 10;
//}
//
//int main() {
//    int n;
//    scanf("%d", &n);
//    printf("%d", getNums(n));
//    return 0;
//}


//#include <iostream>
//#include <string>
//using namespace std;
//string s;
//int main()
//{
//	cin >> s;
//	for (int i = 0; i < s.size(); i++)
//	{
//		if (s[i] % 2 == 0) s[i] = '0';
//		else s[i] = '1';
//	}
//	cout << stoi(s) << endl; // ⾃动处理前导零
//	return 0;
//}

//#include <iostream>
//#include <vector>
//
//using namespace std;
//
//typedef long long LL;
//
//const int N = 1e6 + 10;
//
//LL n, m;
//LL row[N], col[N];
//
//int main()
//{
//
//	cin >> n >> m;
//
//	LL arr[n][m];
//
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			scanf("%ld", &arr[i][j]);
//			row[i] += arr[i][j];
//			col[j] += arr[i][j];
//		}
//	}
//
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			printf("%ld ", row[i] + col[j] - arr[i][j]);
//		}
//		cout << endl;
//	}
//
//	return 0;
//}



// 滑动窗⼝
//#include <iostream>
//using namespace std;
//typedef long long LL;
//const int N = 1e5 + 10;
//LL n, k;
//LL h[N], s[N];
//int main()
//{
//	cin >> n >> k;
//	for (int i = 1; i <= n; i++) cin >> h[i];
//	for (int i = 1; i <= n; i++) cin >> s[i];
//	LL left = 0, right = 0;
//	LL hSum = 0, sSum = 0, hMax = 0, sMin = 0, begin = 0;
//	while (right <= n)
//	{
//		hSum += h[right];
//		sSum += s[right];
//		while (right - left + 1 > k)
//		{
//			hSum -= h[left];
//			sSum -= s[left];
//			left++;
//		}
//		if (right - left + 1 == k)
//		{
//			if (hSum > hMax)
//			{
//				begin = left;
//				hMax = hSum;
//				sMin = sSum;
//			}
//			else if (hSum == hMax && sSum < sMin)
//			{
//				begin = left;
//				hMax = hSum;
//				sMin = sSum;
//			}
//		}
//		right++;
//	}
//	cout << begin << endl;
//	return 0;
//}



//#include <iostream>
//
//using namespace std;
//
//const int N = 1e5 + 10;
//
//typedef long long LL;
//
//int n, k;
//LL h[N], s[N];
//
//int main()
//{
//	cin >> n >> k;
//
//	for (int i = 0; i < n; i++)
//	{
//		cin >> h[i];
//	}
//
//	for (int j = 0; j < n; j++)
//	{
//		cin >> s[j];
//	}
//
//	LL h1 = 0, s1 = 0;
//	LL hmax = 0, smin = 0, begin = -1;
//
//	LL left = 0, right = 0;
//	while (right < n)
//	{
//		h1 += h[right];
//		s1 += s[right];
//
//		while (right + 1 - left > k)
//		{
//			h1 -= h[left];
//			s1 -= s[left];
//			left++;
//		}
//
//		if (right + 1 - left == k)
//		{
//			if (h1 > hmax)
//			{
//				hmax = h1;
//				begin = left;
//				smin = s1;
//			}
//			else if (h1 == hmax && smin > s1)
//			{
//				begin = left;
//				smin = s1;
//			}
//		}
//
//		right++;
//	}
//
//	cout << begin + 1 << endl;
//
//	return 0;
//}

//#include <iostream>
//#include <string>
//
//using namespace std;
//
//const int N = 1e6 + 10;
//
//int a[N], b[N], c[N];
//int lc;
//
//void add(int c[], int a[], int b[])
//{
//	for (int i = 0; i < lc; i++)
//	{
//		c[i] += a[i] + b[i];
//		c[i + 1] += c[i] / 10;
//		c[i] = c[i] % 10;
//	}
//
//	if (c[lc])
//		lc++;
//
//}
//
//int main()
//{
//	string s1, s2;
//	cin >> s1 >> s2;
//	
//	int la = s1.size();
//	int lb = s2.size();
//	lc = max(la, lb);
//	for (int i = 0; i < la; i++)
//	{
//		a[la - 1 - i] = s1[i] - '0';
//	}
//
//	for (int j = 0; j < lb; j++)
//	{
//		a[lb - 1 - j] = s2[j] - '0';
//	}
//
//	add(c, a, b);
//
//	for (int i = lc - 1; i >= 0; i--)
//	{
//		cout << c[i];
//	}
//
//	return 0;
//}

//最⼤子段和
//https://www.luogu.com.cn/problem/P1115
//#include <iostream>
//
//using namespace std;
//
//const int N = 1e4 + 10;
//
//int n;
//int f[N];
//
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		int x;
//		cin >> x;
//		f[i] = f[i - 1] + x;
//	}
//
//	int ret = -INT_MAX;
//	int pmin = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		ret = max(ret, f[i] - pmin);
//		pmin = min(pmin, f[i]);
//	}
//
//	cout << ret << endl;
//
//	return 0;
//}

//#include <iostream>
//
//using namespace std;
//
//typedef long long LL;
//const int N = 1e3 + 5;
//
//int n, m, q;
//int x1, y11, x2, y2;
//LL f[N][N];
//
//int main()
//{
//	cin >> n >> m >> q;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			int x; cin >> x;
//			f[i][j] = f[i][j - 1] + f[i - 1][j] - f[i - 1][j - 1] + x;
//		}
//	}
//
//	while (q--)
//	{
//		cin >> x1 >> y11 >> x2 >> y2;
//		cout << f[x2][y2] - f[x2][y11-1] - f[x1-1][y2] + f[x1-1][y11-1] << endl;
//	}
//
//	return 0;
//}


//#include <iostream>
//
//using namespace std;
//
//typedef long long LL;
//
//const int N = 1e5 + 10;
//
//int n, m;
//LL l, r, k;
//LL /*a[N],*/ f[N];
//
//int main()
//{
//	cin >> n >> m;
//	//for (int i = 1; i <= n; i++)
//	//{
//	//	cin >> a[i];
//	//	f[i] = a[i] - a[i - 1];
//	//}
//
//
//	//while (m--)
//	//{
//	//	cin >> l >> r >> k;
//	//	f[l] += k;
//	//	f[r + 1] -= k;
//	//}
//
//	//for (int i = 1; i <= n; i++)
//	//{
//	//	a[i] = a[i-1] + f[i];
//	//	cout << a[i] << " ";
//	//}
//
//	for (int i = 1; i <= n; i++)
//	{
//		int x; cin >> x;
//		f[i] += x;
//		f[i + 1] -= x;
//	}
//
//	while (m--)
//	{
//		cin >> l >> r >> k;
//		f[l] += k;
//		f[r+1] -= k;
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		f[i] = f[i - 1] + f[i];
//	}
//
//	return 0;
//}


//
//
//#include <iostream>
//
//using namespace std;
//
//typedef long long LL;
//const int N = 1e3 + 10;
//
//int n, m, q;
//LL f[N][N];
//int x1, y11, x2, y2;
//LL k;
//
//void insert(int x1, int y11, int x2, int y2, LL x)
//{
//	f[x1][y11] += x; f[x1][y2 + 1] -= x;
//	f[x2 + 1][y11] -= x; f[x2 + 1][y2 + 1] += x;
//}
//
//int main()
//{
//	cin >> n >> m >> q;
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			LL x; cin >> x;
//			insert(i, j, i, j, x);
//		}
//	}
//
//	while (q--)
//	{
//		cin >> x1 >> y11 >> x2 >> y2 >> k;
//		insert(x1, y11, x2, y2, k);
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
//			cout << f[i][j] << " ";
//		}
//		cout << endl;
//	}
//
//	return 0;
//}


//#include <iostream>
//#include <vector>
//
//using namespace std;
//
//class Solution
//{
//public:
//    vector<int> searchRange(vector<int>& nums, int t)
//    {
//
//        if (nums.size() == 0)
//        {
//            return { -1, -1 };
//        }
//
//        int left = 0;
//        int right = nums.size() - 1;
//        //左端点
//        while (left < right)
//        {
//            int mid = (left + right) / 2;
//            if (nums[mid] >= t)
//            {
//                right = mid;
//            }
//            else
//            {
//                left = mid + 1;
//            }
//        }
//        if (nums[left] != t)
//            return { -1,-1 };
//        int num = left;
//
//        //右端点
//        left = 0;
//        right = nums.size() - 1;
//        while (left < right)
//        {
//            int mid = (left + right + 1) / 2;
//            if (nums[mid] <= t)
//            {
//                left = mid;
//            }
//            else
//            {
//                right = mid - 1;
//            }
//        }
//
//        return { num, left };
//    }
//};

//错误
//#include <iostream>
//#include <unordered_map>
//
//using namespace std;
//
//class Solution
//{
//public:
//    string compressString(string p)
//    {
//        string s1;
//        unordered_map<char, int> hash;
//        for (int i = 0; i < p.size(); i++)
//        {
//            hash[p[i]]++;
//        }
//
//        for (int i = 0; i < p.size(); i++)
//        {
//            if (hash[p[i]] == 1)
//            {
//                s1 += p[i];
//            }
//            else if (hash[p[i]] > 1)
//            {
//                s1 += p[i];
//                s1 += hash[p[i]] - '0';
//                hash[p[i]] = 0;
//            }
//        }
//        return s1;
//    }
//};


//#include <iostream>
//
//using namespace std;
//
//class Solution
//{
//public:
//
//    string compressString(string p)
//    {
//        string s1;
//
//        int left = 0;
//        int right = 0;
//        while (right < p.size())
//        {
//            if (p[right + 1] == p[right])
//            {
//                right++;
//            }
//            else
//            {
//                if (right == left)
//                {
//                    s1 += p[right];
//                }
//                else
//                {
//                    s1 += p[right];
//                    s1 += (right + 1 - left) + '0';
//                }
//
//                right = right + 1;
//                left = right;
//            }
//        }
//
//        return s1;
//    }
//};
//
//int main()
//{
//    string st = "shopeew";
//    Solution s;
//    cout << s.compressString(st) << endl;
//
//    return 0;
//}


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 2e5 + 10; 

LL a[N];
LL b[N];

int n, k;

class grater
{
public:
	bool operator()(pair<int, int> p1, pair<int, int> p2)
	{
		return p1.first > p2.first;
	}
};

int main()
{
	cin >> n >> k;
	vector<pair<int, int>> v1;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++)
	{
		cin >> b[i];
	}

	for (int i = 1; i <= n; i++)
	{
		v1.push_back({ b[i], a[i] });
	}

	sort(v1.begin(), v1.end(), grater());

	LL ret1 = 0, ret2 = 0;
	for (int i = 0; i < k; i++)
	{
		ret2 += v1[i].first;
		ret1 += v1[i].second;
	}

	cout << ret1 << " " << ret2 << endl;

	return 0;
}

